package Veterinaria.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;
import Veterinaria.excepcion.CodigoDuplicadoExcepcion;
import Veterinaria.excepcion.DAOExcepcion;
import Veterinaria.modelo.Articulo;
import Veterinaria.modelo.Cita;
import Veterinaria.modelo.DetalleArticuloCita;
import Veterinaria.modelo.DetalleArticuloCitaTMP;
import Veterinaria.modelo.Doctor;
import Veterinaria.modelo.FacturaDetalleTMP;
import Veterinaria.modelo.Paciente;
import Veterinaria.modelo.Persona;
import Veterinaria.negocio.GestionArticulo;
import Veterinaria.negocio.GestionCita;
import Veterinaria.negocio.GestionPaciente;
import Veterinaria.negocio.GestionPersona;
import Veterinaria.util.ConexionBD;

public class CitasDao extends BaseDAO {

	// Busca Cita por Paciente
	public Collection<Cita> buscarPorPaciente(String idPaciente)
			throws DAOExcepcion {
		String query = "SELECT idcita, iddoctor, tipocita, citaestado, feccita, hora from cita where idpaciente =?";
		Collection<Cita> lista = new ArrayList<Cita>();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setString(1, idPaciente);
			rs = stmt.executeQuery();

			GestionPersona doctor = new GestionPersona();

			while (rs.next()) {
				Cita vo = new Cita();
				vo.setCod_cita(rs.getString("idcita"));
				Doctor doc = doctor.obtenerDoctor(rs.getString("iddoctor"));
				vo.setoDoctores(doc);
				vo.setTipo_cita(rs.getString("tipocita"));
				vo.setCitaestado(rs.getString("citaestado"));
				vo.setFecha(rs.getString("feccita"));
				vo.setHora(rs.getString("hora"));

				lista.add(vo);
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		System.out.println(lista.size());
		return lista;
	}

	public Cita insertar(Cita vo) throws DAOExcepcion, CodigoDuplicadoExcepcion {
		String query = "insert into cita(idcita, idpaciente, iddoctor, direccion, "
				+ "tipocita, citaestado, feccita, hora, notas, estado) values (?,?,?,?,?,?,?,?,?,?)";
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		
		if(NoExisteCita(vo.getCod_cita())){
		
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setString(1, vo.getCod_cita());
			stmt.setString(2, vo.getoPacientes().getCodigo_paciente());
			stmt.setString(3, vo.getoDoctores().getCodigo_persona());
			stmt.setString(4, vo.getDireccion());
			stmt.setString(5, vo.getTipo_cita());
			stmt.setString(6, vo.getCitaestado());
			stmt.setString(7, vo.getFecha());
			stmt.setString(8, vo.getHora());
			stmt.setString(9, vo.getNotas());
			stmt.setString(10, vo.getEstado());

			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo insertar");
			}
			// Obtener el ultimo id
			int id = 0;
			String idCita;
			query = "select last_insert_id()";
			stmt = con.prepareStatement(query);
			rs = stmt.executeQuery();
			if (rs.next()) {
				id = rs.getInt(1);

			}
			idCita = id + "";
			vo.setCod_cita(idCita);

		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		}
		else throw new CodigoDuplicadoExcepcion(vo.getCod_cita());
		return vo;
	}

	public Cita obtener(String idCita) throws DAOExcepcion {
		Cita vo = new Cita();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			String query = "select idcita, idpaciente, iddoctor, direccion, "
					+ "tipocita, citaestado, feccita, hora, notas, estado from cita where idcita=?";
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setString(1, idCita);
			rs = stmt.executeQuery();
			GestionPersona doctor = new GestionPersona();
			GestionPaciente paciente = new GestionPaciente();
			if (rs.next()) {
				Doctor doc = doctor.obtenerDoctor(rs.getString("iddoctor"));
				Paciente pac = paciente.obtener(rs.getString("idpaciente"));

				vo.setCod_cita(rs.getString("idcita"));
				vo.setoPacientes(pac);
				vo.setoDoctores(doc);
				vo.setDireccion(rs.getString("direccion"));
				vo.setTipo_cita(rs.getString("tipocita"));
				vo.setCitaestado(rs.getString("citaestado"));
				vo.setFecha(rs.getString("feccita"));
				vo.setHora(rs.getString("hora"));
				vo.setNotas(rs.getString("notas"));
				vo.setEstado(rs.getString("estado"));
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return vo;
	}

	/*
	 * public void eliminar(String idCita) throws DAOExcepcion { String query =
	 * "delete from paciente WHERE idpaciente=?"; Connection con = null;
	 * PreparedStatement stmt = null; try { con = ConexionBD.obtenerConexion();
	 * stmt = con.prepareStatement(query); stmt.setString(1, idPaciente); int i
	 * = stmt.executeUpdate(); if (i != 1) { throw new
	 * SQLException("No se pudo eliminar"); } } catch (SQLException e) {
	 * System.err.println(e.getMessage()); throw new
	 * DAOExcepcion(e.getMessage()); } finally { this.cerrarStatement(stmt);
	 * this.cerrarConexion(con); } }
	 */

	public Cita actualizar(Cita vo) throws DAOExcepcion {
		String query = "update cita set direccion=?,  "
				+ "tipocita=?, citaestado=?, feccita=?,  hora=?,  notas=? , estado=? where idcita=?";

		Connection con = null;
		PreparedStatement stmt = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);

			stmt.setString(1, vo.getDireccion());
			stmt.setString(2, vo.getTipo_cita());
			stmt.setString(3, vo.getCitaestado());
			stmt.setString(4, vo.getFecha());
			stmt.setString(5, vo.getHora());
			stmt.setString(6, vo.getNotas());
			stmt.setString(7, vo.getEstado());
			stmt.setString(8, vo.getCod_cita());

			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo actualizar");
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return vo;
	}

	public Collection<Cita> listar() throws DAOExcepcion {
		Collection<Cita> c = new ArrayList<Cita>();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionBD.obtenerConexion();
			String query = "select * from cita order by idcita";
			stmt = con.prepareStatement(query);
			rs = stmt.executeQuery();
			while (rs.next()) {
				Cita vo = new Cita();
				vo.setCod_cita("idcita");
				vo.setTipo_cita("tipocita");
				vo.setCitaestado("citaestado");
				vo.setFecha("feccita");
				vo.setHora("hora");
				c.add(vo);
			}

		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return c;
	}

	public DetalleArticuloCita insertarcita_articulo(DetalleArticuloCita vo)
			throws DAOExcepcion {
		String query = "insert into cita_articulo (idcita, idarticulo, cantidad) values (?,?,?)";
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		if ("A".equals(vo.getOcita().getCitaestado())) {

			try {
				con = ConexionBD.obtenerConexion();
				stmt = con.prepareStatement(query);
				stmt.setString(1, vo.getOcita().getCod_cita());
				stmt.setString(2, vo.getOarticulo().getCod_articulo());
				stmt.setInt(3, vo.getCantidad());

				int i = stmt.executeUpdate();
				if (i != 1) {
					throw new SQLException("No se pudo insertar");
				}
				// Obtener el ultimo id
				query = "select last_insert_id()";
				stmt = con.prepareStatement(query);
				rs = stmt.executeQuery();

			} catch (SQLException e) {
				System.err.println(e.getMessage());
				throw new DAOExcepcion(e.getMessage());
			} finally {
				this.cerrarResultSet(rs);
				this.cerrarStatement(stmt);
				this.cerrarConexion(con);
			}
		}
		return vo;
	}

	public void eliminarArticuloCita(String idCita, String idArticulo)
			throws DAOExcepcion {
		String query = "delete from cita_articulo WHERE idcita=? and idarticulo =?";
		Connection con = null;
		PreparedStatement stmt = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setString(1, idCita);
			stmt.setString(2, idArticulo);
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo eliminar");
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
	}

	public DetalleArticuloCita actualizarDetalle(DetalleArticuloCita vo)
			throws DAOExcepcion {
		String query = "update cita_articulo set cantidad=? where idcita=? and idarticulo=?";

		Connection con = null;
		PreparedStatement stmt = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setInt(1, vo.getCantidad());
			stmt.setString(2, vo.getOcita().getCod_cita());
			stmt.setString(3, vo.getOarticulo().getCod_articulo());

			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo actualizar");
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return vo;
	}

	public Collection<DetalleArticuloCita> listarDetalleArticuloCita()
			throws DAOExcepcion {
		Collection<DetalleArticuloCita> det = new ArrayList<DetalleArticuloCita>();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionBD.obtenerConexion();
			String query = "select * from cita_articulo order by idcita";
			stmt = con.prepareStatement(query);
			rs = stmt.executeQuery();
			while (rs.next()) {
				DetalleArticuloCita vo = new DetalleArticuloCita();
				GestionCita cita = new GestionCita();
				GestionArticulo articulo = new GestionArticulo();

				Cita cit = cita.obtener(rs.getString("idcita"));
				Articulo art = articulo.obtener(rs.getString("idarticulo"));

				vo.setOcita(cit);
				vo.setOarticulo(art);
				vo.setCantidad(rs.getInt("cantidad"));
				det.add(vo);
			}

		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return det;
	}

	public Collection<DetalleArticuloCita> buscarDetallexCita(String idCita)
			throws DAOExcepcion {

		String query = "SELECT idcita, idarticulo, cantidad from cita_articulo where idcita =?";
		Collection<DetalleArticuloCita> lista = new ArrayList<DetalleArticuloCita>();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setString(1, idCita);
			rs = stmt.executeQuery();

			GestionCita cita = new GestionCita();
			GestionArticulo articulo = new GestionArticulo();

			while (rs.next()) {
				DetalleArticuloCita vo = new DetalleArticuloCita();

				Cita cit = cita.obtener(rs.getString("idcita"));
				Articulo art = articulo.obtener(rs.getString("idarticulo"));

				vo.setOcita(cit);
				vo.setOarticulo(art);
				vo.setCantidad(rs.getInt("cantidad"));

				lista.add(vo);
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		System.out.println(lista.size());
		return lista;
	}

	public DetalleArticuloCita obtenerdetalle(String idCita, String idArticulo)
			throws DAOExcepcion {
		DetalleArticuloCita vo = new DetalleArticuloCita();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			String query = "select idcita, idarticulo, cantidad from cita_articulo where idcita=? and idarticulo=?";
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setString(1, idCita);
			stmt.setString(2, idArticulo);
			rs = stmt.executeQuery();
			GestionCita cita = new GestionCita();
			GestionArticulo articulo = new GestionArticulo();
			if (rs.next()) {
				Cita cit = cita.obtener(rs.getString("idcita"));
				Articulo art = articulo.obtener(rs.getString("idArticulo"));
				vo.setOcita(cit);
				vo.setOarticulo(art);
				vo.setCantidad(rs.getInt("cantidad"));

			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return vo;
	}
	
    private boolean NoExisteCita(String codigo) throws DAOExcepcion {
        return obtenerCita(codigo) == null;
    }
    
    public Collection<Cita> obtenerReporteCita(String paciente, String tcita, String desde, String hasta, String estado) throws DAOExcepcion {
		Collection<Cita> l = new ArrayList<Cita>();
		
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		String query;
		try {
				if (desde.length() > 0 && hasta.length() > 0){
					System.out.println("Consulta por fechas " + desde.length());
					query = "select distinct c.idcita, c.idpaciente, c.iddoctor, c.direccion, c.tipocita, c.feccita, " +
							" c.hora, c.notas, c.citaestado, c.estado, p.nombre, d.nombre, d.apellido from cita c " +
							" INNER JOIN persona d INNER JOIN paciente p WHERE d.idpersona=c.iddoctor " +
							" and p.nombre like '%" + paciente + "%' " +
							" and c.tipocita like '%" + tcita + "%' " +
							" and c.estado like '%" + estado + "%' " +
							" and c.feccita between '" + desde + "' and '" + hasta + "'" +
							" and p.idpaciente=c.idpaciente " +
							" group by c.idcita order by c.idcita asc";
				}
				else {
					System.out.println("Consultas varias" + desde.length());
					query = "select distinct c.idcita, c.idpaciente, c.iddoctor, c.direccion, c.tipocita, c.feccita, " +
							" c.hora, c.notas, c.estado, c.citaestado, p.nombre, d.nombre, d.apellido from cita c " +
							" INNER JOIN persona d INNER JOIN paciente p WHERE d.idpersona=c.iddoctor " +
							" and p.nombre like '%" + paciente + "%' " +
							" and c.tipocita like '%" + tcita + "%' " +
							" and c.estado like '%" + estado + "%' " +
							" and p.idpaciente=c.idpaciente " +
							" group by c.idcita order by c.idcita asc";
				}
				
				
								
			 con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			// stmt.setString(1, codigo_persona);
			rs = stmt.executeQuery();
			while (rs.next()) {
				Cita vo = new Cita();
				vo.setCod_cita(rs.getString("c.idcita"));
				vo.setDireccion(rs.getString("c.direccion"));
				vo.setFecha(rs.getString("c.feccita"));
				vo.setTipo_cita(rs.getString("c.tipocita"));
				vo.setHora(rs.getString("c.hora"));
				vo.setCitaestado(rs.getString("c.citaestado"));
				vo.setNotas(rs.getString("c.notas")); 
				vo.setEstado(rs.getString("c.estado"));
								
				Paciente pa = new Paciente();
				pa.setCodigo_paciente(rs.getString("c.idpaciente"));
				pa.setNombre_paciente(rs.getString("p.nombre"));
				
				Persona pe = new Persona();
				pe.setCodigo_persona(rs.getString("c.iddoctor"));
				pe.setNombre_persona(rs.getString("d.nombre"));
				pe.setApellido_persona(rs.getString("d.apellido"));
				
				vo.setoPaciente(pa);
				vo.setoDoctor(pe);
				l.add(vo);
			} 
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return l;
	}

	public Cita obtenerCita(String idCita) throws DAOExcepcion {
		Cita vo = new Cita();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			String query = "select idcita, idpaciente, iddoctor, direccion, "
					+ "tipocita, citaestado, feccita, hora, notas, estado from cita where idcita=?";
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setString(1, idCita);
			rs = stmt.executeQuery();
			GestionPersona doctor = new GestionPersona();
			GestionPaciente paciente = new GestionPaciente();
			if (rs.next()) {
				Doctor doc = doctor.obtenerDoctor(rs.getString("iddoctor"));
				Paciente pac = paciente.obtener(rs.getString("idpaciente"));

				vo.setCod_cita(rs.getString("idcita"));
				vo.setoPacientes(pac);
				vo.setoDoctores(doc);
				vo.setDireccion(rs.getString("direccion"));
				vo.setTipo_cita(rs.getString("tipocita"));
				vo.setCitaestado(rs.getString("citaestado"));
				vo.setFecha(rs.getString("feccita"));
				vo.setHora(rs.getString("hora"));
				vo.setNotas(rs.getString("notas"));
				vo.setEstado(rs.getString("estado"));
				return vo;
			}else return null;
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
	}
   
	public Cita GenerarCodigo() throws DAOExcepcion {
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		String Cad = "0";
		Integer Num = 0;
		try {
			String query = "Select max(idcita) as codigo from cita";
			Cita cita = new Cita();
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			rs = stmt.executeQuery();
			if (rs.next()) {
				Cad = rs.getString(1);
				if (Cad == null) {
					Cad = "0000";
				}
			}
			Num = Integer.parseInt(Cad.substring(1, Cad.length()));
			Num = Num + 1;
			String convierte = String.valueOf(Num);
			String codigo = "000" + convierte;

			if (4 <= codigo.length()) {
				int Inicio = (codigo.length() - 4);
				codigo = codigo.substring(Inicio, codigo.length());
			} else {
				codigo = Cad;
			}
			codigo = "T" + codigo;
			cita.setCod_cita(codigo);

			return cita;
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}

	}
	
	public DetalleArticuloCitaTMP insertarDetalleTemporal(DetalleArticuloCitaTMP vo)
			throws DAOExcepcion {

		String query = "insert into cita_articulo_tmp(idcita,idarticulo,descripcion,unidadmed,cantidad) values(?,?,?,?,?)";

		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;

		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setString(1, vo.getIdcita());
			stmt.setString(2, vo.getIdarticulo());
			stmt.setString(3, vo.getDescripcion());
			stmt.setString(4, vo.getUnidadmed());
			stmt.setInt(5, vo.getCantidad());

			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo insertar");
			}

		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}

		return vo;
	}	
	public Collection<DetalleArticuloCitaTMP> listartemporal() throws DAOExcepcion {
		Collection<DetalleArticuloCitaTMP> p = new ArrayList<DetalleArticuloCitaTMP>();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionBD.obtenerConexion();
			String query = "select * from cita_articulo_tmp";
			stmt = con.prepareStatement(query);
			rs = stmt.executeQuery();
			while (rs.next()) {
				DetalleArticuloCitaTMP vo = new DetalleArticuloCitaTMP();
				vo.setIdcita(rs.getString("idcita"));
				vo.setIdarticulo(rs.getString("idarticulo"));
				vo.setDescripcion(rs.getString("descripcion"));
				vo.setUnidadmed(rs.getString("unidadmed"));
				vo.setCantidad(rs.getInt("cantidad"));
				p.add(vo);
			}

		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return p;
	}

	public Collection<Cita> listarCitas(String idCita) throws DAOExcepcion {
		Collection<Cita> c = new ArrayList<Cita>();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionBD.obtenerConexion();
			String query = "select * from cita where idcita like '%" + idCita + "%' order by idcita";
			stmt = con.prepareStatement(query);
			rs = stmt.executeQuery();
			while (rs.next()) {
				Cita vo = new Cita();
				
				GestionPaciente paciente = new GestionPaciente();
				Paciente pac = paciente.obtener(rs.getString("idpaciente"));
				GestionPersona doctor = new GestionPersona();
				Doctor doc = doctor.obtenerDoctor(rs.getString("iddoctor"));
				
				vo.setCod_cita(rs.getString("idcita"));
				vo.setTipo_cita(rs.getString("tipocita"));
				vo.setoPaciente(pac);
				vo.setoDoctor(doc);
				vo.setCitaestado(rs.getString("citaestado"));
				vo.setFecha(rs.getString("feccita"));
				vo.setHora(rs.getString("hora"));
				vo.setNotas(rs.getString("notas"));
				vo.setDireccion(rs.getString("direccion"));
				vo.setTipo_cita(rs.getString("tipocita"));
				c.add(vo);
			}

		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return c;
	}
	
	public DetalleArticuloCitaTMP eliminarcitatemporal()
			throws DAOExcepcion {

		String query = "truncate table cita_articulo_tmp";

		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;

		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo eliminar");
			}

		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}

		return null;
	}		
	
	
	public DetalleArticuloCitaTMP eliminarcitaTemporal(DetalleArticuloCitaTMP vo)
			throws DAOExcepcion {

		String query = "delete from cita_articulo_tmp where idarticulo=?";

		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;

		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setString(1, vo.getIdarticulo());

			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo eliminar");
			}

		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}

		return vo;
	}
}
